package warpper;

/**
 * 包装类
 * java为基本类型对应的提供了8个包装类，目的是让基本类型可以以"对象"形式表示。
 *
 * 基本类型          包装类
 * byte             Byte
 * short            Short
 * int              Integer
 * long             Long
 * float            Float
 * double           Double
 * char             Character
 * boolean          Boolean
 */
public class IntegerDemo1 {
    public static void main(String[] args) {
//        int a = 123;
        int a = 128;
        //将基本类型转换为对应的包装类
//        Integer i1 = new Integer(a);
//        Integer i2 = new Integer(a);
        /*
            Integer的valueOf方法重用了1个字节之内的整数对象
            如果整数取值在:-128-127之间会重用对象，减少内存开销
         */
        Integer i1 = Integer.valueOf(a);
        Integer i2 = Integer.valueOf(a);

        System.out.println(i1==i2);
        System.out.println(i1.equals(i2));


        double d = 123.123;
        //Double的valueOf没有任何额外功能，内部就是new对象
        Double d1 = Double.valueOf(d);
        Double d2 = Double.valueOf(d);
        System.out.println(d1==d2);
        System.out.println(d1.equals(d2));

        /*
            数字类型的包装类可以将其内部保存的基本类型值以其他数字类型返回
            数字类型之间可以互转
         */
        int i = i1.intValue();//将i1包装类对象内部保存的整数以int形式返回
        System.out.println(i);
        double dou = i1.doubleValue();
        System.out.println(dou);//123.0
        //注意:大类型转换为小类型时可能存在溢出，丢精度等问题
        byte b = i1.byteValue();
        System.out.println(b);
    }
}
